package com.novatec.dao;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.sql.DataSource;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import com.novatec.mvc.modelo.*;

public class ReportesDao {

	private SimpleJdbcTemplate simpleJdbcTemplate;
	private final Logger logger = Logger.getLogger(ReportesDao.class);
	
	@Autowired
    public void init(DataSource dataSource) {
        this.simpleJdbcTemplate = new SimpleJdbcTemplate(dataSource);
    }

	//Muestra la lista de todas las solicitudes de cada cliente logueado
	@Transactional(readOnly = true, propagation = Propagation.SUPPORTS)
	public List<SolicitudesItem> getSolicitudesCliente(String idCliente) {

		RowMapper<SolicitudesItem> mapper = new RowMapper<SolicitudesItem>() {  
	        public SolicitudesItem mapRow(ResultSet rs, int rowNum) throws SQLException {
	        	SolicitudesItem solicitudesItem = new SolicitudesItem();

	        	long noorden = rs.getLong("s.NoOrden");
	        	long idcontrato = rs.getLong("ds.IdContrato");
	        	String transaccion = rs.getString("s.Transaccion");
	        	String razonsocialnombre = rs.getString("c.RUC_DNI");
	        	Date fechareg = rs.getDate("s.FechaReg");
	        	Date fechaejec = rs.getDate("s.FechaEjecucion");
	        	String descripcion = rs.getString("se.Descripcion");
	        	String guia = rs.getString("s.Guia");
	        	String reposicion = rs.getString("s.Reposicion");
	        	
	        	solicitudesItem.setnOrden(noorden);
	        	solicitudesItem.setnContrato(idcontrato);
	        	solicitudesItem.setTransaccion(transaccion);
	        	solicitudesItem.setCliente(razonsocialnombre);
	        	solicitudesItem.setFechaEmision(fechareg);
	        	solicitudesItem.setFechaEjecucion(fechaejec);
	        	solicitudesItem.setEstado(descripcion);
	        	solicitudesItem.setGuia(guia);
	        	solicitudesItem.setReposicion(reposicion);
	        	
	            return solicitudesItem;
	        }
	    };

		return simpleJdbcTemplate.query("SELECT distinct s.NoOrden, ds.IdContrato, s.Transaccion, c.RUC_DNI, s.FechaReg, s.FechaEjecucion, se.Descripcion, s.Guia, s.Reposicion FROM solicitud s inner join detsolicitud ds on s.NoOrden = ds.NoOrden inner join solicitud_est se on s.IdSolicEst = se.IdSolicEst inner join cliente c on c.Idusuario = s.IdCliente where c.RUC_DNI = ? ORDER BY s.NoOrden DESC", mapper,idCliente);
	}
	

	//Muestra la lista de todas las solicitudes de cada cliente logueado
	@Transactional(readOnly = true, propagation = Propagation.SUPPORTS)
	public List<SolicitudesItem> getSolicitudesClienteFiltro(long idCliente, String nroOrden, String fechaEmision, long inputEstado) {
		List<Object> parametros = new ArrayList<Object>();
		
		logger.debug("idCliente: " + idCliente);
		logger.debug("nroOrden: " + nroOrden);
		logger.debug("fechaEmision: " + fechaEmision);
		logger.debug("inputEstado: " + inputEstado);
		
		RowMapper<SolicitudesItem> mapper = new RowMapper<SolicitudesItem>() {  
	        public SolicitudesItem mapRow(ResultSet rs, int rowNum) throws SQLException {
	        	SolicitudesItem solicitudesItem = new SolicitudesItem();

	        	long noorden = rs.getLong("s.NoOrden");
	        	long idcontrato = rs.getLong("ds.IdContrato");
	        	String transaccion = rs.getString("s.Transaccion");
	        	//String razonsocialnombre = rs.getString("c.RUC_DNI");
	        	Date fechareg = rs.getDate("s.FechaReg");
	        	Date fechaejec = rs.getDate("s.FechaEjecucion");
	        	String descripcion = rs.getString("se.Descripcion");
	        	String guia = rs.getString("s.Guia");
	        	String reposicion = rs.getString("s.Reposicion");
	        	
	        	solicitudesItem.setnOrden(noorden);
	        	solicitudesItem.setnContrato(idcontrato);
	        	solicitudesItem.setTransaccion(transaccion);
	        	//solicitudesItem.setCliente(razonsocialnombre);
	        	solicitudesItem.setFechaEmision(fechareg);
	        	solicitudesItem.setFechaEjecucion(fechaejec);
	        	solicitudesItem.setEstado(descripcion);
	        	solicitudesItem.setGuia(guia);
	        	solicitudesItem.setReposicion(reposicion);
	        	
	            return solicitudesItem;
	        }
	    };

		String sql = 
			"SELECT distinct s.NoOrden, ds.IdContrato, s.Transaccion, s.FechaReg, s.FechaEjecucion, se.Descripcion, s.Guia, s.Reposicion "  +
			"FROM solicitud s " + 
			"INNER JOIN detsolicitud ds ON s.NoOrden = ds.NoOrden " + 
			"INNER JOIN solicitud_est se ON s.IdSolicEst = se.IdSolicEst " + 
			"INNER JOIN cliente c ON c.Idusuario = s.IdCliente " +
			"WHERE s.IdCliente = ? ";
			
		parametros.add(idCliente);
		
		if (nroOrden != null && !nroOrden.trim().equals("")) {
			sql = sql + "and s.noorden = ? ";
			parametros.add(new Long(nroOrden));
		}
			
		if (fechaEmision != null && !fechaEmision.trim().equals("")) {
			sql = sql + "and s.fechareg = ? ";
			parametros.add(fechaEmision);
		}

		if (inputEstado > 0) {
			sql = sql + "and s.IdSolicEst = ? ";
			parametros.add(new Long(inputEstado));
		}
		
		sql = sql + "ORDER BY s.NoOrden DESC";

		return simpleJdbcTemplate.query(sql, mapper, parametros.toArray());
	}

	@Transactional(readOnly = true, propagation = Propagation.SUPPORTS)
	public List<SolicitudesItem> getAllSolicitudesFiltro(String nroOrden, String cliente, String fechaEmision, long inputEstado) {
		List<Object> parametros = new ArrayList<Object>();
		
		String sql = "SELECT distinct s.NoOrden, ds.IdContrato, s.Transaccion, c.RazonSocialNombre, s.FechaReg, " +
			"s.FechaEjecucion, se.Descripcion, s.Guia, s.Reposicion " +
			"FROM solicitud s " +
			"INNER JOIN detsolicitud ds ON s.NoOrden = ds.NoOrden " +
			"INNER JOIN solicitud_est se ON s.IdSolicEst = se.IdSolicEst " +
			"INNER JOIN cliente c ON c.Idusuario = s.IdCliente " +
			"INNER JOIN usuario usu ON c.IdUsuario = usu.IdUsuario " +
			"WHERE 1 = 1 ";

		if (nroOrden != null && !nroOrden.trim().equals("")) {
			sql = sql + "and s.noorden = ? ";
			parametros.add(new Long(nroOrden));
		}

		if (cliente != null && !cliente.trim().equals("")) {
			//sql = sql + "and usu.login = ? ";
			sql = sql + "and c.RazonSocialNombre like '%" + cliente + "%' ";
			//parametros.add(cliente);
		}

		if (fechaEmision != null && !fechaEmision.trim().equals("")) {
			sql = sql + "and s.fechareg = ? ";
			parametros.add(fechaEmision);
		}

		if (inputEstado > 0) {
			sql = sql + "and s.IdSolicEst = ? ";
			parametros.add(new Long(inputEstado));
		}

		sql = sql + "ORDER BY s.NoOrden DESC";

		RowMapper<SolicitudesItem> mapper = new RowMapper<SolicitudesItem>() {  
	        public SolicitudesItem mapRow(ResultSet rs, int rowNum) throws SQLException {
	        	SolicitudesItem solicitudesItem = new SolicitudesItem();

	        	long noorden = rs.getLong("s.NoOrden");
	        	long idcontrato = rs.getLong("ds.IdContrato");
	        	String transaccion = rs.getString("s.Transaccion");
	        	String razonsocialnombre = rs.getString("c.RazonSocialNombre");
	        	Date fechareg = rs.getDate("s.FechaReg");
	        	Date fechaejec = rs.getDate("s.FechaEjecucion");
	        	String descripcion = rs.getString("se.Descripcion");
	        	String guia = rs.getString("s.Guia");
	        	String reposicion = rs.getString("s.Reposicion");
	        	
	        	solicitudesItem.setnOrden(noorden);
	        	solicitudesItem.setnContrato(idcontrato);
	        	solicitudesItem.setTransaccion(transaccion);
	        	solicitudesItem.setCliente(razonsocialnombre);
	        	solicitudesItem.setFechaEmision(fechareg);
	        	solicitudesItem.setFechaEjecucion(fechaejec);
	        	solicitudesItem.setEstado(descripcion);
	        	solicitudesItem.setGuia(guia);
	        	solicitudesItem.setReposicion(reposicion);
	        	
	            return solicitudesItem;
	        }
	    };

	    if (parametros.size() > 0) {
	    	return simpleJdbcTemplate.query(sql, mapper, parametros.toArray());
	    } else {
	    	return simpleJdbcTemplate.query(sql, mapper);
	    }
	}

	//Muestra la lista de todas las solicitudes
	@Transactional(readOnly = true, propagation = Propagation.SUPPORTS)
	public List<SolicitudesItem> getAllSolicitudes() {

		RowMapper<SolicitudesItem> mapper = new RowMapper<SolicitudesItem>() {  
	        public SolicitudesItem mapRow(ResultSet rs, int rowNum) throws SQLException {
	        	SolicitudesItem solicitudesItem = new SolicitudesItem();

	        	long noorden = rs.getLong("s.NoOrden");
	        	long idcontrato = rs.getLong("ds.IdContrato");
	        	String transaccion = rs.getString("s.Transaccion");
	        	String razonsocialnombre = rs.getString("c.RazonSocialNombre");
	        	Date fechareg = rs.getDate("s.FechaReg");
	        	Date fechaejec = rs.getDate("s.FechaEjecucion");
	        	String descripcion = rs.getString("se.Descripcion");
	        	String guia = rs.getString("s.Guia");
	        	String reposicion = rs.getString("s.Reposicion");
	        	
	        	solicitudesItem.setnOrden(noorden);
	        	solicitudesItem.setnContrato(idcontrato);
	        	solicitudesItem.setTransaccion(transaccion);
	        	solicitudesItem.setCliente(razonsocialnombre);
	        	solicitudesItem.setFechaEmision(fechareg);
	        	solicitudesItem.setFechaEjecucion(fechaejec);
	        	solicitudesItem.setEstado(descripcion);
	        	solicitudesItem.setGuia(guia);
	        	solicitudesItem.setReposicion(reposicion);
	        	
	            return solicitudesItem;
	        }
	    };

		return simpleJdbcTemplate.query("SELECT distinct s.NoOrden, ds.IdContrato, s.Transaccion, c.RazonSocialNombre, s.FechaReg, s.FechaEjecucion, se.Descripcion, s.Guia, s.Reposicion FROM solicitud s inner join detsolicitud ds on s.NoOrden = ds.NoOrden inner join solicitud_est se on s.IdSolicEst = se.IdSolicEst inner join cliente c on c.Idusuario = s.IdCliente ORDER BY s.NoOrden DESC", mapper);
	}
	
	@Transactional(readOnly = true, propagation = Propagation.SUPPORTS)
	public List<SolicitudesItem> getAllPedidos() {

		RowMapper<SolicitudesItem> mapper = new RowMapper<SolicitudesItem>() {  
	        public SolicitudesItem mapRow(ResultSet rs, int rowNum) throws SQLException {
	        	SolicitudesItem item = new PedidosItem();

	        	long noorden = rs.getLong("s.NoOrden");
	        	long idcontrato = rs.getLong("ds.IdContrato");
	        	//String transaccion = rs.getString("s.Transaccion"); //pedido
	        	String razonsocialnombre = rs.getString("c.RazonSocialNombre");
	        	//Date fechareg = rs.getDate("s.FechaReg");
	        	Date fechaejec = rs.getDate("s.FechaEjecucion");
	        	//String descripcion = rs.getString("se.Descripcion"); // estado pendiente

	        	item.setnOrden(noorden);
	        	item.setnContrato(idcontrato);
	        	//item.setTransaccion(transaccion);
	        	item.setCliente(razonsocialnombre);
	        	//item.setFechaEmision(fechareg);
	        	item.setFechaEjecucion(fechaejec);
	        	//item.setEstado(descripcion);


	        	return item;
	        }
	    };

	    RowMapper<SolicitudesItem> mapper2 = new RowMapper<SolicitudesItem>() {  
	        public SolicitudesItem mapRow(ResultSet rs, int rowNum) throws SQLException {
	        	SolicitudesItem item2 = new PedidosItem();

	        	long noorden = rs.getLong("ds.NoOrden");
	        	String nombreTipoCaja = rs.getString("tc.NombreTipoCaja");
	        	long numCajas = rs.getLong("ds.NumCajas");

	        	item2.setnOrden(noorden);
	        	item2.setTipocaja(nombreTipoCaja);
				item2.setNumcajas(numCajas);

	        	return item2;
	        }
	    };
	    
	    List<SolicitudesItem> lista = simpleJdbcTemplate.query("SELECT s.NoOrden, ds.IdContrato, c.RazonSocialNombre, s.FechaEjecucion FROM solicitud s INNER JOIN detsolicitud ds ON s.NoOrden = ds.NoOrden INNER JOIN solicitud_est se ON s.IdSolicEst = se.IdSolicEst INNER JOIN cliente c ON c.Idusuario = s.IdCliente INNER JOIN tipocaja tc ON tc.IdTipoCaja = ds.IdTipoCaja WHERE s.Transaccion = 'pedido' and se.Descripcion = 'registrado' GROUP BY ds.NoOrden", mapper);	    
	    
	    for(int i= 0; i<lista.size(); i++) {
	    	//lista.get(i).setnContrato(simpleJdbcTemplate.queryForLong("SELECT idcontrato FROM detsolicitud WHERE idsolicitud = ?", lista.get(i).getId()));
	    	logger.debug("SELECT tc.NombreTipoCaja, ds.NumCajas FROM tipocaja tc, detsolicitud ds WHERE ds.IdTipoCaja = tc.IdTipoCaja and ds.NoOrden =  " + lista.get(i).getnOrden());
	    	List<SolicitudesItem> listaProductos = simpleJdbcTemplate.query("SELECT ds.NoOrden, tc.NombreTipoCaja, ds.NumCajas FROM tipocaja tc, detsolicitud ds WHERE ds.IdTipoCaja = tc.IdTipoCaja and ds.NoOrden = ? ", mapper2, lista.get(i).getnOrden());
	    	
	    	lista.get(i).setListaProductos(listaProductos);
	    }
	    return lista; 
	}

	@Transactional(readOnly = true, propagation = Propagation.SUPPORTS)
	public List<SolicitudesItem> getAllDevoluciones() {

		RowMapper<SolicitudesItem> mapper = new RowMapper<SolicitudesItem>() {  
	        public SolicitudesItem mapRow(ResultSet rs, int rowNum) throws SQLException {
	        	SolicitudesItem item = new PedidosItem();

	        	long noorden = rs.getLong("s.NoOrden");
	        	long idcontrato = rs.getLong("ds.IdContrato");
	        	//String transaccion = rs.getString("s.Transaccion"); //pedido
	        	String razonsocialnombre = rs.getString("c.RazonSocialNombre");
	        	//Date fechareg = rs.getDate("s.FechaReg");
	        	Date fechaejec = rs.getDate("s.FechaEjecucion");
	        	//String descripcion = rs.getString("se.Descripcion"); // estado pendiente
	        	String reposicion = rs.getString("s.Reposicion");

	        	item.setnOrden(noorden);
	        	item.setnContrato(idcontrato);
	        	//item.setTransaccion(transaccion);
	        	item.setCliente(razonsocialnombre);
	        	//item.setFechaEmision(fechareg);
	        	item.setFechaEjecucion(fechaejec);
	        	//item.setEstado(descripcion);
	        	item.setReposicion(reposicion);


	        	return item;
	        }
	    };

	    RowMapper<SolicitudesItem> mapper2 = new RowMapper<SolicitudesItem>() {  
	        public SolicitudesItem mapRow(ResultSet rs, int rowNum) throws SQLException {
	        	SolicitudesItem item2 = new PedidosItem();

	        	long noorden = rs.getLong("ds.NoOrden");
	        	String nombreTipoCaja = rs.getString("tc.NombreTipoCaja");
	        	long numCajas = rs.getLong("ds.NumCajas");

	        	item2.setnOrden(noorden);
	        	item2.setTipocaja(nombreTipoCaja);
				item2.setNumcajas(numCajas);

	        	return item2;
	        }
	    };
	    
	    List<SolicitudesItem> lista = simpleJdbcTemplate.query("SELECT s.NoOrden, ds.IdContrato, c.RazonSocialNombre, s.FechaEjecucion, s.Reposicion FROM solicitud s INNER JOIN detsolicitud ds ON s.NoOrden = ds.NoOrden INNER JOIN solicitud_est se ON s.IdSolicEst = se.IdSolicEst INNER JOIN cliente c ON c.Idusuario = s.IdCliente INNER JOIN tipocaja tc ON tc.IdTipoCaja = ds.IdTipoCaja WHERE s.Transaccion = 'devolucion' and se.Descripcion = 'registrado' GROUP BY ds.NoOrden", mapper); //TODO Cambiar a registrado!!!	    
	    
	    for(int i= 0; i<lista.size(); i++) {
	    	//lista.get(i).setnContrato(simpleJdbcTemplate.queryForLong("SELECT idcontrato FROM detsolicitud WHERE idsolicitud = ?", lista.get(i).getId()));
	    	logger.debug("SELECT tc.NombreTipoCaja, ds.NumCajas FROM tipocaja tc, detsolicitud ds WHERE ds.IdTipoCaja = tc.IdTipoCaja and ds.NoOrden =  " + lista.get(i).getnOrden());
	    	List<SolicitudesItem> listaProductos = simpleJdbcTemplate.query("SELECT ds.NoOrden,tc.NombreTipoCaja, ds.NumCajas FROM tipocaja tc, detsolicitud ds WHERE ds.IdTipoCaja = tc.IdTipoCaja and ds.NoOrden = ? ",mapper2,lista.get(i).getnOrden());
	    	
	    	lista.get(i).setListaProductos(listaProductos);
	    }

	    return lista; 
	}

	@Transactional(readOnly = true, propagation = Propagation.SUPPORTS)
	public List<SaldoItem> getAllSaldos() {

		RowMapper<SaldoItem> mapper = new RowMapper<SaldoItem>() {  
	        public SaldoItem mapRow(ResultSet rs, int rowNum) throws SQLException {
	        	SaldoItem saldoItem = new SaldoItem();

	        	long idcliente = rs.getLong("c.RUC_DNI");
	        	long idcontrato = rs.getLong("t.IdContrato");
	        	String nombretipocaja = rs.getString("j.NombreTipoCaja");
	        	long contable = rs.getLong("t.SaldoContable");
	        	long packRental = rs.getLong("t.SaldoDisponible");
	        	long entregado = rs.getLong("t.SaldoCliente");
	        	long devolver = rs.getLong("t.SaldoPorDevolver");
	        	long lavado = rs.getLong("t.SaldoEnLavado");

	        	saldoItem.setIdcliente(idcliente);
	        	saldoItem.setIdcontrato(idcontrato);
	        	saldoItem.setTipo(nombretipocaja);
	        	saldoItem.setContable(contable);
	        	saldoItem.setDisponible(packRental);
	        	saldoItem.setEntregado(entregado);
	        	saldoItem.setDevolver(devolver);
	        	saldoItem.setLavado(lavado);
	        	
	        	

	            return saldoItem;
	        }
	    };

		return simpleJdbcTemplate.query("SELECT c.RUC_DNI, t.IdContrato, j.NombreTipoCaja, t.SaldoContable, t.SaldoDisponible, t.SaldoCliente, t.SaldoPorDevolver , t.SaldoEnLavado FROM tipcajcontrat t INNER JOIN contrato r ON t.IdContrato = r.IdContrato INNER JOIN cliente c ON r.IdCliente = c.Idusuario INNER JOIN tipocaja j ON t.IdTipoCaja = j.IdTipoCaja ORDER BY c.RazonSocialNombre", mapper);
	}

	
	// Obtener los saldos de un cliente especifico
	@Transactional(readOnly = true, propagation = Propagation.SUPPORTS)
	public List<SaldoItem> getSaldosCliente(String idCliente) {

		RowMapper<SaldoItem> mapper = new RowMapper<SaldoItem>() {  
	        public SaldoItem mapRow(ResultSet rs, int rowNum) throws SQLException {
	        	SaldoItem saldoItem = new SaldoItem();

	        	long idcliente = rs.getLong("c.RUC_DNI");
	        	long idcontrato = rs.getLong("t.IdContrato");
	        	String nombretipocaja = rs.getString("j.NombreTipoCaja");
	        	long contable = rs.getLong("t.SaldoContable");
	        	long packRental = rs.getLong("t.SaldoDisponible");
	        	long entregado = rs.getLong("t.SaldoCliente");
	        	long devolver = rs.getLong("t.SaldoPorDevolver");
	        	long lavado = rs.getLong("t.SaldoEnLavado");

	        	saldoItem.setIdcliente(idcliente);
	        	saldoItem.setIdcontrato(idcontrato);
	        	saldoItem.setTipo(nombretipocaja);
	        	saldoItem.setContable(contable);
	        	saldoItem.setDisponible(packRental);
	        	saldoItem.setEntregado(entregado);
	        	saldoItem.setDevolver(devolver);
	        	saldoItem.setLavado(lavado);
	        	
	        	

	            return saldoItem;
	        }
	    };

		return simpleJdbcTemplate.query("SELECT c.RUC_DNI, t.IdContrato, j.NombreTipoCaja, t.SaldoContable, t.SaldoDisponible, t.SaldoCliente, t.SaldoPorDevolver , t.SaldoEnLavado FROM tipcajcontrat t INNER JOIN contrato r ON t.IdContrato = r.IdContrato INNER JOIN cliente c ON r.IdCliente = c.Idusuario INNER JOIN tipocaja j ON t.IdTipoCaja = j.IdTipoCaja WHERE c.RUC_DNI=? ORDER BY c.RazonSocialNombre", mapper,idCliente);
	}
	
	
	@Transactional(readOnly = true, propagation = Propagation.SUPPORTS)
	public List<Cliente> getAllClientes() {
		RowMapper<Cliente> mapper = new RowMapper<Cliente>() {  
	        public Cliente mapRow(ResultSet rs, int rowNum) throws SQLException {
	        	Cliente item = new Cliente();

	        	item.setRuc_dni(rs.getLong("c.ruc_dni"));
	        	item.setRazonSocial(rs.getString("c.razonsocialnombre"));
	        	item.setDireccion(rs.getString("c.direccion"));
	        	item.setPais(rs.getString("c.pais"));
	        	item.setCoordenadas(rs.getString("GPS_Coordenadas"));
	        	item.setEmail(rs.getString("c.email"));

	            return item;
	        }
	    };

		return simpleJdbcTemplate.query("SELECT c.ruc_dni, c.razonsocialnombre, c.direccion, c.pais, CONCAT(c.GPS_Longitud,' - ',c.GPS_Latitud) as GPS_Coordenadas, c.email FROM cliente c ", mapper);
	}

	public List<Movimiento> getAllMovimientosCliente() {
		RowMapper<Movimiento> mapper = new RowMapper<Movimiento>() {  
	        public Movimiento mapRow(ResultSet rs, int rowNum) throws SQLException {
	        	Movimiento item = new Movimiento();

	        	item.setCantidad(rs.getLong("d.numcajas"));
	        	item.setFechaEmision(new Date()); // rs.getDate("s.fechareg")
	        	item.setNocontrato(rs.getLong("d.idcontrato"));
	        	item.setNoorden(rs.getLong("s.noorden"));
	        	item.setTipoCaja(rs.getString("tc.descripcion"));
	        	item.setTipoSolicitud(rs.getString("ts.descripcion"));

	            return item;
	        }
	    };

		return simpleJdbcTemplate.query("SELECT s.NoOrden, d.IdContrato, s.FechaReg, s.Transaccion, tc.Descripcion, d.NumCajas FROM solicitud s INNER JOIN detsolicitud d ON d.noorden = s.noorden INNER JOIN tipocaja tc ON tc.idtipocaja = d.idtipocaja INNER JOIN cliente c ON s.IdCliente = c.Idusuario", mapper);
	}

// fvilla 04-10-2012 ini
	public List<Movimiento> getMovimientosCliente(String idCliente) {
		RowMapper<Movimiento> mapper = new RowMapper<Movimiento>() {  
	        public Movimiento mapRow(ResultSet rs, int rowNum) throws SQLException {
	        	Movimiento item = new Movimiento();

	        	item.setCantidad(rs.getLong("d.numcajas"));
	        	item.setFechaEmision(new Date()); // rs.getDate("s.fechareg")
	        	item.setNocontrato(rs.getLong("d.idcontrato"));
	        	item.setNoorden(rs.getLong("s.noorden"));
	        	item.setTipoCaja(rs.getString("tc.descripcion"));
	        	//item.setTipoSolicitud(rs.getString("ts.descripcion"));

	            return item;
	        }
	    };

		return simpleJdbcTemplate.query("SELECT s.NoOrden, d.IdContrato, s.FechaReg, s.Transaccion, tc.Descripcion, d.NumCajas FROM solicitud s INNER JOIN detsolicitud d ON d.noorden = s.noorden INNER JOIN tipocaja tc ON tc.idtipocaja = d.idtipocaja INNER JOIN cliente c ON s.IdCliente = c.Idusuario where c.RUC_DNI='"+idCliente+"'", mapper);
	}
	
// fvilla 04-10-2012 fin
	
	
}